package write.oo;

/**
 * 抽象类：
 * 由abstract修饰
 * 包含抽象方法的类必须是抽象类，但不包含抽象方法的类也可以声明为抽象类
 * 抽象类不能被实例化(new对象)
 *
 * 抽象类是需要被继承的，派生类：
 * 必须重写所有抽象方法------------------变不完整为完整
 * 也声明为抽象类----------------------------一般不这么用
 *
 * 抽象类的意义：
 * 封装共有的属性和行为------------------代码复用
 * 可以包含抽象方法，为所有派生类统一入口(名字统一)，强制必须重写
 */
public abstract class AbstractClass {
    /**
     * 抽象类，可以包含普通类包含的一切，
     * 只是类的修饰词需要加上abstract,同时无法再new
     * 比普通类多一个抽象方法
     */
    int x;
    int y;
    public AbstractClass() {
    }
    public AbstractClass(int x, int y) {
        this.x = x;
        this.y = y;
    }
    void say(){}
    private void sayHi(){}

    /**
     * 抽象方法
     * 由abstract修饰
     * 只有方法的定义，没有具体的实现(连{}都没有)
     * 强制子类重写抽象方法，定义一个规范
     */
    abstract void sayHello();
}
